package yunjiao.javatutorials.guava.concurrent;

import com.google.common.util.concurrent.RateLimiter;

/**
 * 阻塞式获取令牌
 *
 * @author yangyunjiao
 */
public class BlockingRateLimiterExample {
    public static void main(String[] args) {
        // 创建限流器：每秒2个许可
        RateLimiter rateLimiter = RateLimiter.create(2.0);

        for (int i = 0; i < 10; i++) {
            // 获取令牌，如果没有可用令牌则阻塞等待
            double waitTime = rateLimiter.acquire();
            System.out.printf("任务 %d 执行，等待时间: %.2f秒%n", i, waitTime);
            processRequest(i);
        }
    }

    private static void processRequest(int id) {
        System.out.println("处理请求: " + id + " | 时间: " + System.currentTimeMillis());
    }
}
